package com.xdog.web3.controller.twitter;

import cn.dev33.satoken.annotation.SaIgnore;
import com.alibaba.fastjson.JSONObject;
import com.xdog.common.core.domain.R;
import com.xdog.web3.domain.twitter.UnifiedTwitterData;
import com.xdog.web3.domain.twitter.TwitterFollowUser;
import com.xdog.web3.service.ITwitterService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * Twitter数据控制器
 */
@Tag(name = "Twitter数据", description = "Twitter相关接口")
@RestController
@RequestMapping("/web3/twitter")
public class TwitterController {

    @Resource
    private ITwitterService twitterService;

    /**
     * 获取缓存的Twitter推文数据
     * 直接从缓存获取数据，如果没有就返回空，不回退到实时API
     */
    @Operation(summary = "获取缓存的Twitter推文数据", description = "直接从缓存中获取Twitter推文数据，提高响应速度")
    @GetMapping("/cached")
    @SaIgnore
    public R<UnifiedTwitterData> getCachedTweets() {
        try {
            UnifiedTwitterData result = twitterService.getCachedTwitterData();
            // 根据注释说明，目前只有tweets字段有值，因此只处理推文数据部分
            if (result != null && result.getTweets() != null && !result.getTweets().isEmpty()) {
                // 保存完整的Twitter数据到数据库（仅基于推文数据）
                twitterService.saveAllTwitterDataToDatabase(result);
            }
            if (result != null) {
                return R.ok(result);
            } else {
                // 缓存中没有数据，直接返回空结果
                return R.ok(null);
            }
        } catch (Exception e) {
            // 出现异常也返回空结果而不是错误
            return R.ok(null);
        }
    }

    /**
     * 获取推荐关注的Twitter用户
     */
    @Operation(summary = "获取推荐关注的Twitter用户", description = "从数据库获取推荐的Twitter用户列表")
    @GetMapping("/recommended-users")
    @SaIgnore
    public R<List<TwitterFollowUser>> getRecommendedUsers() {
        try {
            List<TwitterFollowUser> users = twitterService.getRecommendedTwitterUsers();
            return R.ok(users);
        } catch (Exception e) {
            return R.fail("获取推荐用户失败: " + e.getMessage());
        }
    }
}